Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Criticism of Java</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Criticism_of_Java"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Criticism_of_Java rootpage-Criticism_of_Java skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Criticism of Java</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<p>
The <a href="Java_(programming_language)" title="Java (programming language)">Java programming language</a> and <a href="Java_(software_platform)" title="Java (software platform)">Java software platform</a> have been criticized for design choices including the implementation of generics, forced object-oriented programming, the handling of unsigned numbers, the implementation of <a href="Floating-point_arithmetic" title="Floating-point arithmetic">floating-point arithmetic</a>, and a history of security vulnerabilities in the primary Java VM implementation, <a href="HotSpot_(virtual_machine)" title="HotSpot (virtual machine)">HotSpot</a>. Software written in Java, especially its early versions, has been criticized for its performance compared to software written in other programming languages. Developers have also remarked that differences in various Java implementations must be taken into account when writing complex Java programs that must work with all of them.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Language_syntax_and_semantics">Language syntax and semantics</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Checked_exceptions">Checked exceptions</h3></div>
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">Further information: <a href="Exception_handling_(programming)#Checked_exceptions" title="Exception handling (programming)">Exception handling (programming) §&nbsp;Checked exceptions</a></div>
<p>Java introduced <a href="Exception_handling_(programming)#Checked_exceptions" title="Exception handling (programming)">checked exceptions</a> where a method must declare the checked exceptions it throws in the method signature. This can result in unnecessarily verbose <a href="Boilerplate_code" title="Boilerplate code">boilerplate code</a>. No major language has followed Java in implementing checked exceptions.
</p>
<div class="mw-heading mw-heading3"><h3 id="Generics">Generics</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Further information: <a href="Generics_in_Java" title="Generics in Java">Generics in Java</a></div>
<p>When <a href="Generic_programming" title="Generic programming">generics</a> were added to Java 5.0, there was already a large framework of classes (many of which were already <a href="Deprecation" title="Deprecation">deprecated</a>), so generics were implemented using <a href="Generics_in_Java#Problems_with_type_erasure" title="Generics in Java">type erasure</a> to allow for <i>migration compatibility</i> and re-use of these existing classes. This limited the features that could be provided, compared to other languages.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p><p>Because generics are implemented using <a href="Type_erasure" title="Type erasure">type erasure</a> the actual type of a template parameter E is unavailable at run time. Thus, the following operations are not possible in Java:<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">MyClass</span><span class="o">&lt;</span><span class="n">E</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">myMethod</span><span class="p">(</span><span class="n">Object</span><span class="w"> </span><span class="n">item</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">item</span><span class="w"> </span><span class="k">instanceof</span><span class="w"> </span><span class="n">E</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1">//Compiler error</span>
<span class="w"> </span><span class="p">...</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">E</span><span class="w"> </span><span class="n">item2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">E</span><span class="p">();</span><span class="w"> </span><span class="c1">//Compiler error</span>
<span class="w"> </span><span class="n">E</span><span class="o">[]</span><span class="w"> </span><span class="n">iArray</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">E</span><span class="o">[</span><span class="mi">10</span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="c1">//Compiler error</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>Additionally, in 2016, the following example was found revealing Java to be unsound and in turn making JVMs which threw ClassCastExceptions or any other kind of runtime error technically non-conforming.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> This was corrected in Java 10.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">class</span> <span class="nc">Nullless</span><span class="o">&lt;</span><span class="n">T</span><span class="p">,</span><span class="w"> </span><span class="n">U</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">class</span> <span class="nc">Constrain</span><span class="o">&lt;</span><span class="n">B</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">U</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{}</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">Constrain</span><span class="o">&lt;?</span><span class="w"> </span><span class="kd">super</span><span class="w"> </span><span class="n">T</span><span class="o">&gt;</span><span class="w"> </span><span class="n">constrain</span><span class="p">;</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">U</span><span class="w"> </span><span class="n">u</span><span class="p">;</span>

<span class="w"> </span><span class="n">Nullless</span><span class="p">(</span><span class="n">T</span><span class="w"> </span><span class="n">t</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">u</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">coerce</span><span class="p">(</span><span class="n">t</span><span class="p">);</span>
<span class="w"> </span><span class="n">constrain</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">getConstrain</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="o">&lt;</span><span class="n">B</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">U</span><span class="o">&gt;</span>
<span class="w"> </span><span class="n">U</span><span class="w"> </span><span class="nf">upcast</span><span class="p">(</span><span class="n">Constrain</span><span class="o">&lt;</span><span class="n">B</span><span class="o">&gt;</span><span class="w"> </span><span class="n">constrain</span><span class="p">,</span><span class="w"> </span><span class="n">B</span><span class="w"> </span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">b</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">U</span><span class="w"> </span><span class="nf">coerce</span><span class="p">(</span><span class="n">T</span><span class="w"> </span><span class="n">t</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">upcast</span><span class="p">(</span><span class="n">constrain</span><span class="p">,</span><span class="w"> </span><span class="n">t</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">Constrain</span><span class="o">&lt;?</span><span class="w"> </span><span class="kd">super</span><span class="w"> </span><span class="n">T</span><span class="o">&gt;</span><span class="w"> </span><span class="nf">getConstrain</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">constrain</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">zero</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Nullless</span><span class="o">&lt;</span><span class="n">Integer</span><span class="p">,</span><span class="n">String</span><span class="o">&gt;</span><span class="p">(</span><span class="mi">0</span><span class="p">).</span><span class="na">u</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Noun-orientedness">Noun-orientedness</h3></div>
<div role="note" class="hatnote navigation-not-searchable">See also: <a href="Object-oriented_programming#Popularity_and_reception" title="Object-oriented programming">Object-oriented programming §&nbsp;Popularity and reception</a></div>
<p>By design, Java encourages programmers to think of a solution in terms of nouns (classes) interacting with each other, and to think of verbs (methods) as operations that can be performed on or by that noun.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> <a href="Steve_Yegge" title="Steve Yegge">Steve Yegge</a> argues that this causes an unnecessary restriction on language expressiveness because a class can have multiple functions that operate on it, but a function is bound to a class and can never operate on multiple types.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>
</p><p>Many other <a href="Programming_paradigm" title="Programming paradigm">multi-paradigm</a> languages support functions as a top-level construct. When combined with other features such as <a href="Function_overloading" title="Function overloading">function overloading</a> (one verb, multiple nouns) and <a href="Generic_programming" title="Generic programming">generic functions</a> (one verb, a family of nouns with certain properties), the programmer can decide whether to solve a specific problem in terms of nouns or verbs. <a href="Java_8" class="mw-redirect" title="Java 8">Java version 8</a> introduced some functional programming features.
</p>
<div class="mw-heading mw-heading3"><h3 id="Unsigned_integer_types">Unsigned integer types</h3></div>
<p>Java lacks native <a href="Unsigned_integer" class="mw-redirect" title="Unsigned integer">unsigned integer</a> types. Unsigned data is often generated from programs written in <a href="C_(programming_language)" title="C (programming language)">C</a>, and the lack of these types prevents direct data interchange between C and Java. Unsigned large numbers are also used in a number of numeric processing fields, including cryptography, which can make Java more inconvenient to use for these tasks.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>
Although it is possible to get around this problem using conversion code and larger data types, it makes using Java cumbersome for handling unsigned data. While a 32-bit signed integer may be used to hold a 16-bit unsigned value losslessly, and a 64-bit signed integer a 32-bit unsigned integer, there is no larger type to hold a 64-bit unsigned integer. In all cases, the memory consumed may double, and typically any logic relying on <a href="Two's_complement" title="Two's complement">two's complement</a> overflow must be rewritten. If abstracted, function calls become necessary for many operations which are native to some other languages. Alternatively, it is possible to use Java's signed integers to <a href="Emulator" title="Emulator">emulate</a> unsigned integers of the same size, but this requires detailed knowledge of <a href="Bitwise_operations" class="mw-redirect" title="Bitwise operations">bitwise operations</a>.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> Some support for unsigned integer types was provided in JDK 8, but not for unsigned bytes and with no support in the Java language.<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Operator_overloading">Operator overloading</h3></div>
<p>Java has been criticized for not supporting user-defined operators. <a href="Operator_overloading" title="Operator overloading">Operator overloading</a> improves readability,<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> so its absence can make Java code less readable, especially for classes representing mathematical objects, such as complex numbers and matrices. Java has only one non-numerical use of an operator: <code>+</code> and <code>+=</code> for string concatenation. However, this is implemented by the compiler, which generates code to create StringBuilder instances. It is impossible to create user-defined operator overloads.
</p>
<div class="mw-heading mw-heading3"><h3 id="Compound_value_types">Compound value types</h3></div>
<p>Java lacks compound value types, such as <a href="Struct_(C_programming_language)" title="Struct (C programming language)">structs</a> in C, bundles of data that are manipulated directly instead of indirectly via references. Value types can sometimes be faster and smaller than classes with references.<sup id="cite_ref-JavaGrande_12-0" class="reference"><a href="#cite_note-JavaGrande-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-NumComp_13-0" class="reference"><a href="#cite_note-NumComp-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> For example, Java's <code>HashMap</code> is implemented as an array of references to <code>HashMap.Entry</code> objects,<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> which in turn contain references to key and value objects. Looking something up requires inefficient double dereferencing. If <code>Entry</code> were a value type, the array could store key-value pairs directly, eliminating the first indirection, increasing <a href="Locality_of_reference" title="Locality of reference">locality of reference</a> and reducing memory use and <a href="Fragmentation_(computer)" class="mw-redirect" title="Fragmentation (computer)">heap fragmentation</a>. Further, if Java supported generic primitive types, keys and values could be stored in the array directly, removing both levels of indirection.
</p>
<div class="mw-heading mw-heading3"><h3 id="Large_arrays">Large arrays</h3></div>
<p>Java has been criticized for not supporting arrays of 2<sup>31</sup> (about 2.1 billion) or more elements.<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> This is a limitation of the language; the <i>Java Language Specification</i>, Section 10.4, states that:
</p>
<blockquote><p>Arrays must be indexed by int values... An attempt to access an array component with a long index value results in a compile-time error.<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> </p></blockquote>
<p>Supporting large arrays would also require changes to the JVM.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup> This limitation manifests itself in areas such as collections being limited to 2 billion elements<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup> and the inability to memory map continuous file segments larger than 2&nbsp;GB.<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup> Java also lacks (outside of its 2D arrays) multidimensional arrays (contiguously allocated single blocks of memory accessed by a single indirection), which limits performance for scientific and technical computing.<sup id="cite_ref-NumComp_13-1" class="reference"><a href="#cite_note-NumComp-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Integration_of_primitives_and_arrays">Integration of primitives and arrays</h3></div>
<p>Arrays and primitives are somewhat special and need to be treated differently from classes. This has been criticized<sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup> because it requires many variants of functions when creating general-purpose libraries.
</p>
<div class="mw-heading mw-heading3"><h3 id="Parallelism">Parallelism</h3></div>
<p><a href="Per_Brinch_Hansen" title="Per Brinch Hansen">Per Brinch Hansen</a> argued in 1999<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup> that Java's implementation of parallelism in general, and <a href="Monitor_(synchronization)" title="Monitor (synchronization)">monitors</a> in particular, does not provide the guarantees and enforcements required for secure and reliable parallel programming. While a programmer can establish design and coding <i>conventions</i>, the compiler can make no attempt to enforce them, so the programmer may unwittingly write insecure or unreliable code.
</p>
<div class="mw-heading mw-heading3"><h3 id="Serialization">Serialization</h3></div>
<p>Java provides a mechanism for <a href="Object_serialization" class="mw-redirect" title="Object serialization">object serialization</a>, where an object can be represented as a sequence of bytes that includes its data fields, together with type information about itself and its fields. After an object is serialized, it can later be deserialized; that is, the type information and bytes that represent its data can be used to recreate the object in memory.<sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup> This raises very serious theoretical and actual security risks.<sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Floating_point_arithmetic">Floating point arithmetic</h3></div>
<p>Although Java's <a href="Floating_point" class="mw-redirect" title="Floating point">floating point</a> arithmetic is largely based on <a href="IEEE_754" title="IEEE 754">IEEE 754</a> (<i>Standard for Binary Floating-Point Arithmetic</i>), some mandated standard features are not supported even when using the <code><a href="Strictfp" title="Strictfp">strictfp</a></code> modifier, such as Exception Flags and Directed Roundings. The <a href="Extended_precision" title="Extended precision">extended precision</a> types defined by IEEE 754 (and supported by many processors) are not supported by Java.<sup id="cite_ref-27" class="reference"><a href="#cite_note-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-28" class="reference"><a href="#cite_note-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Lack_of_tuples">Lack of tuples</h3></div>
<p>Java does not natively support <a href="Tuple" title="Tuple">tuples</a>, resulting in a proliferation of third-party implementations which must be imported and handled by the programmer.<sup id="cite_ref-Dzone_8.5_30-0" class="reference"><a href="#cite_note-Dzone_8.5-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup> The argument against a generic tuple class is the danger it poses in proliferating unmaintainable code.<sup id="cite_ref-31" class="reference"><a href="#cite_note-31"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Abstracted_relationship_between_code_and_hardware">Abstracted relationship between code and hardware</h2></div>
<p>In 2008 the <a href="United_States_Department_of_Defense" title="United States Department of Defense">United States Department of Defense</a>'s Center Software Technology Support published an article in the "Journal of Defense Software Engineering" discussing the unsuitability of Java as the first language taught. Disadvantages were that students "had no feeling for the relationship between the source program and what the hardware would actually do" and the impossibility "to develop a sense of the run-time cost of what is written because it is extremely hard to know what any method call will eventually execute".<sup id="cite_ref-32" class="reference"><a href="#cite_note-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup> In 2005 <a href="Joel_Spolsky" title="Joel Spolsky">Joel Spolsky</a> criticized Java as an overfocused part of universities' curricula in his essay <i>The Perils of JavaSchools</i>.<sup id="cite_ref-33" class="reference"><a href="#cite_note-33"><span class="cite-bracket">[</span>33<span class="cite-bracket">]</span></a></sup> Others, like Ned Batchelder, disagree with Spolsky for criticizing the parts of the language that he found difficult to understand, claiming that Spolsky's commentary was more of a 'subjective rant'.<sup id="cite_ref-34" class="reference"><a href="#cite_note-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Performance">Performance</h2></div>
<div role="note" class="hatnote navigation-not-searchable">Further information: <a href="Java_performance" title="Java performance">Java performance</a></div>
<p>Before 2000, when the <a href="HotSpot_(virtual_machine)" title="HotSpot (virtual machine)">HotSpot VM</a> was implemented in Java 1.3, there were many criticisms of its performance. Java has been demonstrated to run at a speed comparable with optimized native code, and modern <a href="JVM" class="mw-redirect" title="JVM">JVM</a> implementations are <a href="The_Computer_Language_Benchmarks_Game" title="The Computer Language Benchmarks Game">regularly benchmarked</a> as one of the fastest language platforms available – typically no more than three times slower than C and C++.<sup id="cite_ref-35" class="reference"><a href="#cite_note-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup>
</p><p>Performance has improved substantially since early versions.<sup id="cite_ref-LewisNeumann_36-0" class="reference"><a href="#cite_note-LewisNeumann-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup> Performance of <a href="JIT_compiler" class="mw-redirect" title="JIT compiler">JIT compilers</a> relative to native compilers has been shown to be quite similar in some optimized tests.<sup id="cite_ref-LewisNeumann_36-1" class="reference"><a href="#cite_note-LewisNeumann-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-37" class="reference"><a href="#cite_note-37"><span class="cite-bracket">[</span>37<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-38" class="reference"><a href="#cite_note-38"><span class="cite-bracket">[</span>38<span class="cite-bracket">]</span></a></sup>
</p><p><a href="Java_bytecode" title="Java bytecode">Java bytecode</a> can either be interpreted at run time by a virtual machine, or be compiled at load time or run time into native code which runs directly on the computer's hardware. Interpretation is slower than native execution, but compilation at load time or run time has an initial performance penalty. Modern JVM implementations all use the compilation approach, so after the initial startup time the performance is similar to native code.
</p><p>Game designer and programmer <a href="John_Carmack" title="John Carmack">John Carmack</a> concluded in 2005 about Java on <a href="Cell-phone" class="mw-redirect" title="Cell-phone">cell-phones</a>: "The biggest problem is that Java is really slow. On a pure cpu / memory / display / communications level, most modern cell phones should be considerably better gaming platforms than a Game Boy Advance. With Java, on most phones you are left with about the CPU power of an original 4.77 mhz (sic) <a href="IBM_PC" class="mw-redirect" title="IBM PC">IBM PC</a>, and lousy control over everything."<sup id="cite_ref-39" class="reference"><a href="#cite_note-39"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Security">Security</h2></div>
<div role="note" class="hatnote navigation-not-searchable">Further information: <a href="Java_security" class="mw-redirect" title="Java security">Java security</a></div>
<p>The Java platform provides a security architecture<sup id="cite_ref-40" class="reference"><a href="#cite_note-40"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup> which is designed to allow the user to run <a href="Untrusted_code" class="mw-redirect" title="Untrusted code">untrusted bytecode</a> in a "sandboxed" manner to protect against malicious or poorly written software. This "sandboxing" feature is intended to protect the user by restricting access to platform features and APIs which could be exploited by <a href="Malware" title="Malware">malware</a>, such as accessing the local filesystem or network, or running arbitrary commands.
</p><p>In 2010, there was a significant rise in malicious software targeting security flaws in the sandboxing mechanisms used by Java implementations, including Oracle's. These flaws allow untrusted code to bypass the sandbox restrictions, exposing the user to attacks. Flaws were fixed by security updates, but were still exploited on machines without the updates.<sup id="cite_ref-exploit_41-0" class="reference"><a href="#cite_note-exploit-41"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup>
</p><p>Critics have suggested that users do not update their Java installations because they don't know they have them, or how to update them. Many organisations restrict software installation by users, but are slow to deploy updates.<sup id="cite_ref-exploit_41-1" class="reference"><a href="#cite_note-exploit-41"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-42" class="reference"><a href="#cite_note-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup>
</p><p><a href="Oracle_Corporation" title="Oracle Corporation">Oracle</a> has been criticized for not promptly providing updates for known security bugs.<sup id="cite_ref-43" class="reference"><a href="#cite_note-43"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup> When Oracle finally released a patch for widely-exploited flaws in Java 7, it removed Java 6 from users' machines, despite it being widely used by enterprise applications that Oracle had stated were not impacted by the flaws.<sup id="cite_ref-44" class="reference"><a href="#cite_note-44"><span class="cite-bracket">[</span>44<span class="cite-bracket">]</span></a></sup>
</p><p>In 2007, a research team led by Marco Pistoia exposed another important flaw of the Java security model,<sup id="cite_ref-45" class="reference"><a href="#cite_note-45"><span class="cite-bracket">[</span>45<span class="cite-bracket">]</span></a></sup> based on <i>stack inspection</i>. When a security-sensitive resource is accessed, the security manager triggers code that walks the call stack, to verify that the codebase of each method on it has authority to access the resource. This is done to prevent <a href="Confused_deputy_problem" title="Confused deputy problem">confused deputy attacks</a>, which take place every time a legitimate, more privileged program is tricked by another into misusing its authority. The confused-deputy problem is a specific type of <a href="Privilege_escalation" title="Privilege escalation">privilege escalation</a>. Pistoia observed that when a security-sensitive resource is accessed, the code responsible for acquiring the resource may no longer be on the stack. For example, a method executed in the past may have modified the value of an object field that determines which resource to use. That method call may no longer be on the stack when it is inspected.
</p><p>Some permissions are implicitly equivalent to Java's <code>AllPermission</code>. These include the permission to change the current security manager (and replace it with one that could potentially bypass the stack inspection), the permission to instantiate and use a custom class loader (which could choose to associate <code>AllPermission</code> to a malicious class upon loading it), and the permission to create a custom permission (which could declare itself as powerful as <code>AllPermission</code> via its <code>implies</code> method). These issues are documented in Pistoia's two books on Java Security.<sup id="cite_ref-46" class="reference"><a href="#cite_note-46"><span class="cite-bracket">[</span>46<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-47" class="reference"><a href="#cite_note-47"><span class="cite-bracket">[</span>47<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Parallel_installations">Parallel installations </h3></div>
<p>Before Java 7, the installers would not remove older Java installations. It was common on a Windows system to see multiple installations of Java on the same computer.<sup id="cite_ref-48" class="reference"><a href="#cite_note-48"><span class="cite-bracket">[</span>48<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-49" class="reference"><a href="#cite_note-49"><span class="cite-bracket">[</span>49<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-50" class="reference"><a href="#cite_note-50"><span class="cite-bracket">[</span>50<span class="cite-bracket">]</span></a></sup> Multiple installations were permitted and could be used by programs that rely on specific versions, including malicious programs. This issue was addressed in Java 7: with the user's permission, the installer removes earlier installations.<sup id="cite_ref-51" class="reference"><a href="#cite_note-51"><span class="cite-bracket">[</span>51<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="JIT-related_security_challenges_and_possible_exploits">JIT-related security challenges and possible exploits</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Further information: <a href="Just-in-time_compilation#Security" title="Just-in-time compilation">Just-in-time compilation §&nbsp;Security</a></div>
<p>JIT compilation fundamentally uses executable data, and thus poses security challenges and possible exploits.
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1266661725">
/* start https://en.wikipedia.org/ */


.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:1px solid var(--border-color-base,#a2a9b1);padding:0.1em;background:var(--background-color-neutral-subtle,#f8f9fa)}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}


/* end https://en.wikipedia.org/ */
</style>
<ul><li><a href="Comparison_of_Java_and_C%2B%2B" title="Comparison of Java and C++">Comparison of Java and C++</a></li>
<li><a href="Comparison_of_C_Sharp_and_Java" title="Comparison of C Sharp and Java">Comparison of C# and Java</a></li>
<li><a href="Java_performance" title="Java performance">Java performance</a></li>
<li><a href="Write_once%2C_run_anywhere" title="Write once, run anywhere">Write once, run anywhere</a></li>
<li><a href="Scala_(programming_language)" title="Scala (programming language)">Scala</a>, a programming language designed to address criticisms of Java</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Notes">Notes</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist reflist-columns references-column-width" style="column-width: 30em;">
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFWong2002" class="citation web cs1">Wong, William (27 May 2002). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20090321180726/http://electronicdesign.com/Articles/Index.cfm?ArticleID=2255&amp;pg=3">"Write Once, Debug Everywhere"</a>. electronicdesign.com. Archived from <a rel="nofollow" class="external text" href="http://electronicdesign.com/Articles/Index.cfm?ArticleID=2255&amp;pg=3">the original</a> on 21 March 2009<span class="reference-accessdate">. Retrieved <span class="nowrap">3 August</span> 2008</span>. <q><i>So far, the "write-once, run-everywhere" promise of Java hasn't come true. The bulk of a Java application will migrate between most Java implementations, but taking advantage of a VM-specific feature causes porting problems.</i></q></cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20070102132948/http://www.ociweb.com/jnb/jnbJul2003.html">"Generics in Java"</a>. Object Computing, Inc. Archived from <a rel="nofollow" class="external text" href="http://www.ociweb.com/jnb/jnbJul2003.html">the original</a> on 2 January 2007<span class="reference-accessdate">. Retrieved <span class="nowrap">9 December</span> 2006</span>.</cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20120722203911/http://code.stephenmorley.org/articles/java-generics-type-erasure/">"What's Wrong With Java: Type Erasure"</a>. 6 December 2006. Archived from <a rel="nofollow" class="external text" href="http://www.safalra.com/programming/java/wrong-type-erasure/">the original</a> on 22 July 2012<span class="reference-accessdate">. Retrieved <span class="nowrap">9 December</span> 2006</span>.</cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://java.sun.com/docs/books/tutorial/java/generics/erasure.html">"Type Erasure"</a>.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite id="CITEREFAminTate2016" class="citation journal cs1">Amin, Nada; Tate, Ross (19 October 2016). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F3022671.2984004">"Java and scala's type systems are unsound: the existential crisis of null pointers"</a>. <i>ACM SIGPLAN Notices</i>. <b>51</b> (10): <span class="nowrap">838–</span>848. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F3022671.2984004">10.1145/3022671.2984004</a></span>. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a>&nbsp;<a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0362-1340">0362-1340</a>.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/specs/">"Java SE Specifications"</a>.</cite></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><cite id="CITEREFYegge" class="citation web cs1">Yegge, Steve. <a rel="nofollow" class="external text" href="http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html">"Execution in the Kingdom of Nouns"</a>.</cite></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text">
<cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4504839">"Java libraries should provide support for unsigned integer arithmetic"</a>. <i>Bug Database, Sun Developer Network</i>. Oracle<span class="reference-accessdate">. Retrieved <span class="nowrap">18 January</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><cite id="CITEREFOwen2009" class="citation web cs1">Owen, Sean R. (5 November 2009). <a rel="nofollow" class="external text" href="http://darksleep.com/player/JavaAndUnsignedTypes.html">"Java and unsigned int, unsigned short, unsigned byte, unsigned long, etc. (Or rather, the lack thereof)"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">9 October</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://blogs.oracle.com/darcy/entry/unsigned_api">"Unsigned Integer Arithmetic API now in JDK 8 (Joseph D. Darcy's Oracle Weblog)"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">15 May</span> 2016</span>.</cite></span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20200205133743/https://blog.miyozinc.com/core-tutorials/cpp/cpp-operator-overloading/">"C++ Operator Overloading"</a>. 7 April 2016. Archived from <a rel="nofollow" class="external text" href="https://blog.miyozinc.com/core-tutorials/cpp/cpp-operator-overloading/">the original</a> on 5 February 2020<span class="reference-accessdate">. Retrieved <span class="nowrap">5 February</span> 2020</span>.</cite></span>
</li>
<li id="cite_note-JavaGrande-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-JavaGrande_12-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFJava_Grande_Forum_Panel1998" class="citation journal cs1">Java Grande Forum Panel (November 1998). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20130518233804/http://www.javagrande.org/sc98/sc98grande.pdf">"Java Grande Forum Report: Making Java Work for High-End Computing"</a> <span class="cs1-format">(PDF)</span>. <i>SC98</i>. Archived from <a rel="nofollow" class="external text" href="http://www.javagrande.org/sc98/sc98grande.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 18 May 2013<span class="reference-accessdate">. Retrieved <span class="nowrap">10 February</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-NumComp-13"><span class="mw-cite-backlink">^ <a href="#cite_ref-NumComp_13-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-NumComp_13-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFMoreiraS._P._MidkiffM._GuptaP._V._Artigas2000" class="citation journal cs1">Moreira, J.E.; S. P. Midkiff; M. Gupta; P. V. Artigas; M. Snir; R. D. Lawrence (2000). "Java programming for high-performance numerical computing". <i>IBM Systems Journal</i>. <b>39</b> (1): <span class="nowrap">21–</span>56. <a href="CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a>&nbsp;<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.13.1554">10.1.1.13.1554</a></span>. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1147%2Fsj.391.0021">10.1147/sj.391.0021</a>. <q>True rectangular multidimensional arrays are the most important data structures for scientific and engineering computing.</q></cite></span>
</li>
<li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text"><cite id="CITEREFHutchinson2008" class="citation web cs1">Hutchinson, Ben (14 June 2008). <a rel="nofollow" class="external text" href="https://benhutchison.wordpress.com/2008/06/15/the-jvm-needs-value-types/">"The JVM needs Value Types"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">3 February</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://zgrepcode.com/java/oracle/jdk-8u181/java/util/hashmap.java">"java.util.HashMap Source Code"</a>. <i>JDK 8</i>. zGrepCode<span class="reference-accessdate">. Retrieved <span class="nowrap">6 August</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><cite id="CITEREFArndtBundschusNaegele2009" class="citation book cs1">Arndt, Holger; Bundschus, Markus; Naegele, Andreas (2009). <a rel="nofollow" class="external text" href="http://www.holger-arndt.com/library/COMPSAC2009-ujmp-draft.pdf">"Towards a Next-Generation Matrix Library for Java"</a> <span class="cs1-format">(PDF)</span>. <i>2009 33rd Annual IEEE International Computer Software and Applications Conference</i>. pp.&nbsp;<span class="nowrap">460–</span>467. <a href="CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a>&nbsp;<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.471.7567">10.1.1.471.7567</a></span>. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2Fcompsac.2009.67">10.1109/compsac.2009.67</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-0-7695-3726-9</bdi>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a>&nbsp;<a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:14672978">14672978</a>. <q>...it is not possible in Java to have arrays with more than 2<sup>31</sup> entries...</q></cite></span>
</li>
<li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20130326011311/http://programmers.stackexchange.com/questions/108699/why-does-javas-collection-size-return-an-int">"Why does Java's Collection.size() return an int?"</a>. <i>Stack Overflow</i>. Archived from <a rel="nofollow" class="external text" href="http://programmers.stackexchange.com/questions/108699/why-does-javas-collection-size-return-an-int">the original</a> on 26 March 2013<span class="reference-accessdate">. Retrieved <span class="nowrap">10 February</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-18">^</a></b></span> <span class="reference-text"><cite id="CITEREFJames_GoslingBill_JoyGuy_SteeleGilad_Bracha" class="citation web cs1">James Gosling; Bill Joy; Guy Steele; Gilad Bracha. <a rel="nofollow" class="external text" href="http://java.sun.com/docs/books/jls/third_edition/html/arrays.html">"The Java Language Specification"</a> (Third&nbsp;ed.). Addison Wesley<span class="reference-accessdate">. Retrieved <span class="nowrap">6 February</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><cite id="CITEREFLowden2009" class="citation web cs1">Lowden, James (24 March 2009). <a rel="nofollow" class="external text" href="http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000869.html">"Proposal: Large arrays (take two)"</a>. <i>Java.net coin-dev mailing list</i><span class="reference-accessdate">. Retrieved <span class="nowrap">10 February</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html">"java.util.Collection"</a>. <i>Java™ Platform, Standard Edition 7 API Specification</i><span class="reference-accessdate">. Retrieved <span class="nowrap">10 February</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html">"java.nio.ByteBuffer"</a>. <i>Java™ Platform, Standard Edition 7 API Specification</i><span class="reference-accessdate">. Retrieved <span class="nowrap">6 February</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-22">^</a></b></span> <span class="reference-text"><cite id="CITEREFSherman_R._Alpert_(IBM)1998" class="citation web cs1">Sherman R. Alpert (IBM) (1998). <a rel="nofollow" class="external text" href="http://www.research.ibm.com/people/a/alpert/ptch/ptch.html">"Primitive Types Considered Harmful"</a>. Java Report, November, 1998 (Volume 3, Number 11)<span class="reference-accessdate">. Retrieved <span class="nowrap">18 November</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text"><cite id="CITEREFBrinch_Hansen1999" class="citation web cs1">Brinch Hansen (April 1999). <a rel="nofollow" class="external text" href="http://www.math.unipd.it/~tullio/SCD/2008/Materiale/PBH_SIGPLAN_Notices_34-4_199904.pdf">"Java's Insecure Parallelism"</a> <span class="cs1-format">(PDF)</span>. SIGPLAN<span class="reference-accessdate">. Retrieved <span class="nowrap">13 October</span> 2012</span>.</cite>; <a rel="nofollow" class="external text" href="http://brinch-hansen.net/papers/1999b.pdf">alternate url</a></span>
</li>
<li id="cite_note-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-24">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.geeksforgeeks.org/serialization-in-java/">Serialization and Deserialization in Java with Example</a> by geeksforgeeks website</span>
</li>
<li id="cite_note-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-25">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://dzone.com/articles/serialization-must-die">Serialization Must Die</a> Security issues and problems with serialization of random objects. by dzone.com</span>
</li>
<li id="cite_note-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-26">^</a></b></span> <span class="reference-text"><cite id="CITEREFBloch2018" class="citation book cs1">Bloch, Joshua (2018). <i>Effective Java</i>. Addison-Wesley. pp.&nbsp;<span class="nowrap">339–</span>345. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-0-13-468599-1</bdi>.</cite></span>
</li>
<li id="cite_note-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-27">^</a></b></span> <span class="reference-text"><cite id="CITEREFKahanJoseph_D._Darcy1998" class="citation web cs1">Kahan, W.; Joseph D. Darcy (1 March 1998). <a rel="nofollow" class="external text" href="http://www.cs.berkeley.edu/~wkahan/JAVAhurt.pdf">"How Java's Floating-Point Hurts Everyone Everywhere"</a> <span class="cs1-format">(PDF)</span><span class="reference-accessdate">. Retrieved <span class="nowrap">9 December</span> 2006</span>.</cite></span>
</li>
<li id="cite_note-28"><span class="mw-cite-backlink"><b><a href="#cite_ref-28">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.2.3">"Types, Values, and Variables"</a>. Sun Microsystems<span class="reference-accessdate">. Retrieved <span class="nowrap">9 December</span> 2006</span>.</cite></span>
</li>
<li id="cite_note-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-29">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.ibm.com/developerworks/java/library/j-jtp0114/">"Java theory and practice: Where's your point? Tricks and traps with floating point and decimal numbers"</a>. IBM. 1 January 2003<span class="reference-accessdate">. Retrieved <span class="nowrap">19 November</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-Dzone_8.5-30"><span class="mw-cite-backlink"><b><a href="#cite_ref-Dzone_8.5_30-0">^</a></b></span> <span class="reference-text"><cite class="citation news cs1"><a rel="nofollow" class="external text" href="https://dzone.com/articles/whats-wrong-java-8-part-v">"What's Wrong in Java 8, Part V: Tuples - DZone"</a>. <i>dzone.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">18 March</span> 2023</span>.</cite></span>
</li>
<li id="cite_note-31"><span class="mw-cite-backlink"><b><a href="#cite_ref-31">^</a></b></span> <span class="reference-text"><cite id="CITEREFBourrillion2010" class="citation web cs1">Bourrillion, Kevin (31 March 2010). <a rel="nofollow" class="external text" href="https://mail.openjdk.org/pipermail/core-libs-dev/2010-March/003995.html">"Java.util.Pair"</a>.</cite></span>
</li>
<li id="cite_note-32"><span class="mw-cite-backlink"><b><a href="#cite_ref-32">^</a></b></span> <span class="reference-text"><cite id="CITEREFRobert_B.K._DewarEdmond_Schonberg2008" class="citation web cs1">Robert B.K. Dewar; Edmond Schonberg (1 January 2008). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20090412180717/http://www.stsc.hill.af.mil/CrossTalk/2008/01/0801DewarSchonberg.html">"Computer Science Education: Where Are the Software Engineers of Tomorrow?"</a>. <i>CrossTalk Jan 2008</i>. <a href="United_States_Department_of_Defense" title="United States Department of Defense">U.S. DOD</a> Software Technology Support Center. Archived from <a rel="nofollow" class="external text" href="http://www.stsc.hill.af.mil/CrossTalk/2008/01/0801DewarSchonberg.html">the original</a> on 12 April 2009<span class="reference-accessdate">. Retrieved <span class="nowrap">15 March</span> 2015</span>. <q>The Pitfalls of Java as a First Programming Language [...] Students found it hard to write programs that did not have a graphic interface, had no feeling for the relationship between the source program and what the hardware would actually do, and (most damaging) did not understand the semantics of pointers at all, which made the use of C in systems programming very challenging.</q></cite></span>
</li>
<li id="cite_note-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-33">^</a></b></span> <span class="reference-text"><cite id="CITEREFJoel_Spolsky2005" class="citation web cs1"><a href="Joel_Spolsky" title="Joel Spolsky">Joel Spolsky</a> (29 December 2005). <a rel="nofollow" class="external text" href="http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html">"Joel on Software - The Perils of JavaSchools"</a>. <a href="Joelonsoftware" class="mw-redirect" title="Joelonsoftware">joelonsoftware</a><span class="reference-accessdate">. Retrieved <span class="nowrap">18 November</span> 2015</span>. <q>It's bad enough that JavaSchools fail to weed out the kids who are never going to be great programmers, which the schools could justifiably say is not their problem. Industry, or, at least, the recruiters-who-use-grep, are surely clamoring for Java to be taught. But JavaSchools also fail to train the brains of kids to be adept, agile, and flexible enough to do good software design</q></cite></span>
</li>
<li id="cite_note-34"><span class="mw-cite-backlink"><b><a href="#cite_ref-34">^</a></b></span> <span class="reference-text"><cite id="CITEREFNed_Batchelder2006" class="citation web cs1">Ned Batchelder (1 January 2006). <a rel="nofollow" class="external text" href="http://nedbatchelder.com/blog/200601/joel_spolsky_is_a_crotchety_old_man.html">"Joel Spolsky is a crotchety old man"</a>. nedbatchelder.com<span class="reference-accessdate">. Retrieved <span class="nowrap">2 February</span> 2016</span>. <q>Why does Joel pick out pointers and recursion as the two gatekeeper concepts? Because he found them difficult? As Tim Bray points out, Java is perfectly adept at recursion, and concurrency may be a more important and difficult concept to master in any case. The emphasis on recursion in Lisp languages is a bit over the top, and doesn't carry into other programming cultures. Why do people think it's so important for software engineering? Don't get me wrong: I love recursion when it's the right tool for the job, but that is just not that often to warrant Joel's focus on it as a fundamental concept.<br>While we're hunting around for tough concepts that separate the men from the boys, what about the one that got Joel and I into a tussle two years ago: Exceptions. He doesn't like them, basically, because they confuse him. Is this any different than a Java guy not liking pointers? Yes, you can avoid exceptions and use status returns, but you can also try really hard to avoid pointers. Does that mean you should? So Joel's got the concepts he likes (pointers and recursion), and laments their decline, but doesn't seem to notice that there are newer concepts that he's never caught on to, which the Java kiddies feel at home with.</q></cite></span>
</li>
<li id="cite_note-35"><span class="mw-cite-backlink"><b><a href="#cite_ref-35">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20150113040554/http://benchmarksgame.alioth.debian.org/u64q/java.html">"Computer Language Benchmarks Game: Java vs Gnu C++"</a>. benchmarksgame.alioth.debian.org. Archived from <a rel="nofollow" class="external text" href="http://benchmarksgame.alioth.debian.org/u64q/java.html">the original</a> on 13 January 2015<span class="reference-accessdate">. Retrieved <span class="nowrap">19 November</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-LewisNeumann-36"><span class="mw-cite-backlink">^ <a href="#cite_ref-LewisNeumann_36-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-LewisNeumann_36-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFJ.P.LewisUlrich_Neumann" class="citation web cs1">J.P.Lewis &amp; Ulrich Neumann. <a rel="nofollow" class="external text" href="http://scribblethink.org/Computer/javaCbenchmark.html">"Performance of Java versus C++"</a>. Graphics and Immersive Technology Lab, <a href="University_of_Southern_California" title="University of Southern California">University of Southern California</a>.</cite></span>
</li>
<li id="cite_note-37"><span class="mw-cite-backlink"><b><a href="#cite_ref-37">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.kano.net/javabench/">"The Java Faster than C++ Benchmark"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">15 May</span> 2016</span>.</cite></span>
</li>
<li id="cite_note-38"><span class="mw-cite-backlink"><b><a href="#cite_ref-38">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://research.sun.com/techrep/2002/smli_tr-2002-114.pdf">FreeTTS - A Performance Case Study</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20090325195557/http://research.sun.com/techrep/2002/smli_tr-2002-114.pdf">Archived</a> 25 March 2009 at the <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a>, Willie Walker, Paul Lamere, Philip Kwok</span>
</li>
<li id="cite_note-39"><span class="mw-cite-backlink"><b><a href="#cite_ref-39">^</a></b></span> <span class="reference-text"><cite id="CITEREFJohn_D._Carmack2005" class="citation web cs1"><a href="John_D._Carmack" class="mw-redirect" title="John D. Carmack">John D. Carmack</a> (27 March 2005). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20151124005023/http://armadilloaerospace.com/n.x/johnc/recent%20updates/archive?news_id=295">"Cell phone adventures"</a>. <i>John Carmack's Blog</i>. armadilloaerospace.com. Archived from <a rel="nofollow" class="external text" href="http://armadilloaerospace.com/n.x/johnc/recent%20updates/archive?news_id=295">the original</a> on 24 November 2015<span class="reference-accessdate">. Retrieved <span class="nowrap">10 November</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-40"><span class="mw-cite-backlink"><b><a href="#cite_ref-40">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/7/docs/technotes/guides/security/spec/security-spec.doc.html">Java SE Platform Security Architecture</a>. Oracle. Retrieved 2013-04-23.</span>
</li>
<li id="cite_note-exploit-41"><span class="mw-cite-backlink">^ <a href="#cite_ref-exploit_41-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-exploit_41-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.infoq.com/news/2010/10/java-exploit-uptick">"Researchers Highlight Recent Uptick in Java Security Exploits"</a>.</cite></span>
</li>
<li id="cite_note-42"><span class="mw-cite-backlink"><b><a href="#cite_ref-42">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20120921140402/http://blogs.technet.com/b/mmpc/archive/2010/10/18/have-you-checked-the-java.aspx">"Have you checked the Java?"</a>. Archived from <a rel="nofollow" class="external text" href="http://blogs.technet.com/b/mmpc/archive/2010/10/18/have-you-checked-the-java.aspx">the original</a> on 21 September 2012<span class="reference-accessdate">. Retrieved <span class="nowrap">25 November</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-43"><span class="mw-cite-backlink"><b><a href="#cite_ref-43">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.theregister.co.uk/2012/08/30/oracle_knew_about_flaws/">"Oracle knew about critical Java flaws since April"</a>. <i><a href="The_Register" title="The Register">The Register</a></i>. 30 August 2012<span class="reference-accessdate">. Retrieved <span class="nowrap">30 August</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-44"><span class="mw-cite-backlink"><b><a href="#cite_ref-44">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.theregister.co.uk/2013/01/31/java_security_update/">"'Silent but deadly' Java security update breaks legacy apps - dev"</a>. <i><a href="The_Register" title="The Register">The Register</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">15 May</span> 2016</span>.</cite></span>
</li>
<li id="cite_note-45"><span class="mw-cite-backlink"><b><a href="#cite_ref-45">^</a></b></span> <span class="reference-text"><cite id="CITEREFPistoiaBanerjeeNaumann2007" class="citation book cs1">Pistoia, Marco; Banerjee, Anindya; Naumann, David A. (May 2007). "Beyond Stack Inspection: A Unified Access-Control and Information-Flow Security Model". <i>2007 IEEE Symposium on Security and Privacy (SP '07)</i>. IEEE. pp.&nbsp;<span class="nowrap">149–</span>163. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2Fsp.2007.10">10.1109/sp.2007.10</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-0-7695-2848-9</bdi>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a>&nbsp;<a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:4112294">4112294</a>.</cite></span>
</li>
<li id="cite_note-46"><span class="mw-cite-backlink"><b><a href="#cite_ref-46">^</a></b></span> <span class="reference-text"><cite id="CITEREFPistoia1999" class="citation book cs1">Pistoia, Marco, ed. (1999). <i>Java 2 network security</i>. ITSO networking series (2.&nbsp;ed.). Upper Saddle River, New Jersey: Prentice Hall. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-0-13-015592-4</bdi>.</cite></span>
</li>
<li id="cite_note-47"><span class="mw-cite-backlink"><b><a href="#cite_ref-47">^</a></b></span> <span class="reference-text"><cite id="CITEREFPistoia2004" class="citation book cs1">Pistoia, Marco, ed. (2004). <i>Enterprise Java security: building secure J2EE applications</i>. Boston, Mass. Munich: Addison-Wesley. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-0-321-11889-9</bdi>.</cite></span>
</li>
<li id="cite_note-48"><span class="mw-cite-backlink"><b><a href="#cite_ref-48">^</a></b></span> <span class="reference-text"><cite id="CITEREFGrimes2011" class="citation web cs1">Grimes, Roger A. (15 November 2011). <a rel="nofollow" class="external text" href="https://www.infoworld.com/article/2078470/old-java-versions-breed-new-security-exploits.html">"Old Java versions breed new security exploits"</a>. <i>InfoWorld</i><span class="reference-accessdate">. Retrieved <span class="nowrap">10 September</span> 2023</span>.</cite></span>
</li>
<li id="cite_note-49"><span class="mw-cite-backlink"><b><a href="#cite_ref-49">^</a></b></span> <span class="reference-text"><cite id="CITEREFKrill2012" class="citation web cs1">Krill, Paul (4 May 2012). <a rel="nofollow" class="external text" href="https://www.infoworld.com/article/2071226/oracle-urges-removal-of-older-java-versions-due-to-security-risks.html">"Oracle urges removal of older Java versions due to security risks"</a>. <i>InfoWorld</i><span class="reference-accessdate">. Retrieved <span class="nowrap">10 September</span> 2023</span>.</cite></span>
</li>
<li id="cite_note-50"><span class="mw-cite-backlink"><b><a href="#cite_ref-50">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.java.com/en/download/help/remove_olderversions.html">"Why should I uninstall older versions of Java from my system?"</a>. <i>Java</i>. 10 September 2023<span class="reference-accessdate">. Retrieved <span class="nowrap">10 September</span> 2023</span>.</cite></span>
</li>
<li id="cite_note-51"><span class="mw-cite-backlink"><b><a href="#cite_ref-51">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.oracle.com/java/technologies/javase/autoupdate.html">"Java 6 Auto-Update to Java 7"</a>. <i>Oracle</i>. 10 September 2023<span class="reference-accessdate">. Retrieved <span class="nowrap">10 September</span> 2023</span>.</cite></span>
</li>
</ol></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="https://www.gnu.org/philosophy/java-trap.html">Free But Shackled - The Java Trap</a>, an essay by <a href="Richard_Stallman" title="Richard Stallman">Richard Stallman</a> of the <a href="Free_software_movement" title="Free software movement">free software movement</a> (dated April 12, 2004)</li>
<li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20080822133107/http://www.stsc.hill.af.mil/CrossTalk/2008/01/0801DewarSchonberg.html">Computer Science Education: Where Are the Software Engineers of Tomorrow? </a> (dated January 8, 2008)</li>
<li><a rel="nofollow" class="external text" href="http://geekonjava.blogspot.com/2015/06/bad-features-of-java.html">What are Bad features of Java? </a></li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}


/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Java_(software_platform)419" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="3"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div id="Java_(software_platform)419" style="font-size:114%;margin:0 4em"><a href="Java_(software_platform)" title="Java (software platform)">Java (software platform)</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Platforms</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_virtual_machine" title="Java virtual machine">JVM</a></li>
<li><a href="Java_Platform%2C_Micro_Edition" title="Java Platform, Micro Edition">Java ME</a> (Micro)</li>
<li><a href="Java_Platform%2C_Standard_Edition" title="Java Platform, Standard Edition">Java SE</a> (Standard)</li>
<li><a href="Jakarta_EE" title="Jakarta EE">Jakarta EE</a> (Enterprise)</li>
<li><a href="Java_Card" title="Java Card">Java Card</a></li>
<li><a href="Android_software_development#SDK" title="Android software development">Android SDK</a></li>
<li><a href="GraalVM" title="GraalVM">GraalVM</a></li></ul>
</div></td><td class="noviewer navbox-image" rowspan="5" style="width:1px;padding:0 0 0 2px"><div><span typeof="mw:File"></span></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Technologies</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Oracle</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Squawk_virtual_machine" title="Squawk virtual machine">Squawk</a></li>
<li><a href="Java_Development_Kit" title="Java Development Kit">Java Development Kit</a></li>
<li><a href="OpenJDK" title="OpenJDK">OpenJDK</a></li>
<li><a href="Java_virtual_machine" title="Java virtual machine">Java virtual machine</a></li>
<li><a href="JavaFX" title="JavaFX">JavaFX</a></li>
<li><a href="Maxine_Virtual_Machine" title="Maxine Virtual Machine">Maxine VM</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Platform</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_applet" title="Java applet">Applets</a></li>
<li><a href="Jakarta_Servlet" title="Jakarta Servlet">Servlets</a></li>
<li><a href="MIDlet" title="MIDlet">MIDlets</a></li>
<li><a href="Jakarta_Server_Pages" title="Jakarta Server Pages">JSP</a></li>
<li><a href="Jakarta_Faces" title="Jakarta Faces">JSF</a></li>
<li><a href="Java_Web_Start" title="Java Web Start">Web Start</a> (JNLP)</li>
<li><a href="Pack200" title="Pack200">Pack200</a></li>
<li><a href="Java_Platform_Module_System" title="Java Platform Module System">Modules</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Major<br>third-party</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Blackdown_Java" title="Blackdown Java">Blackdown</a></li>
<li><a href="Eclipse_(software)" title="Eclipse (software)">Eclipse</a></li>
<li><a href="GNU_Classpath" title="GNU Classpath">GNU Classpath</a></li>
<li><a href="Google_Web_Toolkit" title="Google Web Toolkit">GWT</a></li>
<li><a href="Apache_Harmony" title="Apache Harmony">Harmony</a></li>
<li><a href="Hibernate_(framework)" title="Hibernate (framework)">Hibernate</a></li>
<li><a href="IcedTea" title="IcedTea">IcedTea</a></li>
<li><a href="Jazelle" title="Jazelle">Jazelle</a></li>
<li><a href="Spring_Framework" title="Spring Framework">Spring</a></li>
<li><a href="Apache_Struts" title="Apache Struts">Struts</a></li>
<li><a href="Oracle_TopLink" title="Oracle TopLink">TopLink</a></li>
<li><a href="WildFly" title="WildFly">WildFly</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">History</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_version_history" title="Java version history">Java version history</a></li>
<li><a href="Java_Community_Process" title="Java Community Process">Java Community Process</a></li>
<li><a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a></li>
<li><a href="Free_Java_implementations" title="Free Java implementations">Free Java implementations</a></li>
<li>Slogan: <i><a href="Write_once%2C_run_anywhere" title="Write once, run anywhere">Write once, run anywhere</a></i></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="List_of_JVM_languages" title="List of JVM languages">JVM<br>languages</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_(programming_language)" title="Java (programming language)">Java</a></li>
<li><a href="BeanShell" title="BeanShell">BeanShell</a></li>
<li><a href="Clojure" title="Clojure">Clojure</a></li>
<li><a href="Groovy_(programming_language)" class="mw-redirect" title="Groovy (programming language)">Groovy</a></li>
<li><a href="JRuby" title="JRuby">JRuby</a></li>
<li><a href="Jython" title="Jython">Jython</a></li>
<li><a href="Kotlin_(programming_language)" title="Kotlin (programming language)">Kotlin</a></li>
<li><a href="Processing" title="Processing">Processing</a></li>
<li><a href="Rhino_(JavaScript_engine)" title="Rhino (JavaScript engine)">Rhino</a></li>
<li><a href="Scala_(programming_language)" title="Scala (programming language)">Scala</a></li>
<li><a href="Oxygene_(programming_language)" title="Oxygene (programming language)">Oxygene</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Community</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Conferences</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="JavaOne" title="JavaOne">JavaOne</a></li>
<li><a href="Devoxx" title="Devoxx">Devoxx</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Organizations</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Apache_Software_Foundation" class="mw-redirect" title="Apache Software Foundation">Apache Software Foundation</a></li>
<li><a href="Eclipse_Foundation" title="Eclipse Foundation">Eclipse Foundation</a></li>
<li><a href="Java_Community_Process" title="Java Community Process">Java Community Process</a></li>
<li><a href="Oracle_Corporation" title="Oracle Corporation">Oracle Corporation</a></li>
<li><a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a>, <a href="Sun_Microsystems_Laboratories" class="mw-redirect" title="Sun Microsystems Laboratories">Sun Microsystems Laboratories</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">People</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="James_Gosling" title="James Gosling">James Gosling</a></li>
<li><a href="Arthur_van_Hoff" title="Arthur van Hoff">Arthur van Hoff</a></li>
<li><a href="Urs_H%C3%B6lzle" title="Urs Hölzle">Urs Hölzle</a></li>
<li><a href="Patrick_Naughton" title="Patrick Naughton">Patrick Naughton</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><td class="navbox-abovebelow" colspan="3"><div><span class="noviewer" typeof="mw:File"><span title="Category"></span></span> <b>Category</b> • <span class="nowrap"><span class="skin-invert-image noviewer" typeof="mw:File"></span> </span><a href="Portal%3AComputer_programming" title="Portal:Computer programming">Computer programming portal</a></div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-05-08" href="https://en.wikipedia.org/wiki/?title=Criticism_of_Java&amp;oldid=1289408104">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>